
cc.Class({
    extends: cc.Component,

    properties: {

    },

    // LIFE-CYCLE CALLBACKS:

    onLoad() {
        this._SuccessCallback = null;
        this._FailCallback = null;
    },

    start() {

    },


    // update (dt) {},

    /**
     * 当碰撞产生的时候调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionEnter: function (other, self) {
        // 未击中

        if (other.node.group == 'hold') {
            if (cc.sys.localStorage.getItem('verbtion') === null) {
                this.vibrationEffect();
            } else {
                if (cc.sys.localStorage.getItem('verbtion') === "100") {
                    this.vibrationEffect();
                }
            }

            // 撞飞
            this.node.stopAllActions();
            let seq = cc.sequence(
                cc.repeat(cc.spawn(cc.rotateBy(0.1, 90), cc.moveBy(0.1, 100, -100)), 10),
                cc.removeSelf(),
            );
            this.node.runAction(seq);

            if (this._FailCallback != null) {
                this._FailCallback();
            }
        }

        // 击中
        else if (other.node.group == 'plate') {
            if (this._SuccessCallback != null) {
                this._SuccessCallback();
            }
        }
        else if (other.node.group == 'shield') {
            // if (cc.sys.isNative) {
            //     cc.Device.vibrate();
            // }
            if (cc.sys.localStorage.getItem('verbtion') === null) {
                this.vibrationEffect();
            } else {
                if (cc.sys.localStorage.getItem('verbtion') === "100") {
                    this.vibrationEffect();
                }
            }

            // 撞飞
            this.node.stopAllActions();
            let seq = cc.sequence(
                cc.repeat(cc.spawn(cc.rotateBy(0.1, 90), cc.moveBy(0.1, 100, -100)), 10),
                cc.removeSelf(),
            );
            this.node.runAction(seq);

            if (this._FailCallback != null) {
                this._FailCallback();
            }
        }
    },

    // 震动效果
    vibrationEffect() {
        if (cc.sys.os === cc.sys.OS_IOS) {
            //调用苹果的方法;
        }
        else if (cc.sys.os === cc.sys.OS_ANDROID) {
            jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "startVibrator", "()V");
        }
    },


    /**
     * 当碰撞产生后，碰撞结束前的情况下，每次计算碰撞结果后调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionStay: function (other, self) {
        // console.log('on collision stay');
    },
    /**
     * 当碰撞结束后调用
     * @param  {Collider} other 产生碰撞的另一个碰撞组件
     * @param  {Collider} self  产生碰撞的自身的碰撞组件
     */
    onCollisionExit: function (other, self) {
        // console.log('on collision exit');
    },

    /**
     * @description: 设置回调
     * @param {object} obj 回调参数
     * @param {function} obj.success 成功回调
     * @param {function} obj.fail 失败回调
     * @return: 
     */
    setCallback(obj) {
        this._SuccessCallback = obj.success;
        this._FailCallback = obj.fail;
    },
});
